/**
 * 四海兄弟工作小组，群号:160517807
 * @author 乔继承
 * @date 2013年11月2日 下午11:08:56 
 * @version V1.0   
 */
package org.mcpro.common.action;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.mcpro.common.service.ICommonSerivce;
import org.mcpro.common.util.ObjectUtil;
import org.mcpro.core.model.DictObject;
import org.mcpro.core.model.DictObject2field;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;


/**
 * 
 * @author 乔继承
 * @date 2013年11月2日 下午11:08:56
 * 
 */
public class CommonAction extends Action {
	private Map<String, Object> attributes=actionContext.getRequestAttribute();//请求属性
	private ICommonSerivce commonService;

	/**
	 * 获取所有的dictObject对象
	 * 
	 * @return
	 * @author 乔继承
	 * @date 2014年3月5日 上午12:39:27
	 */
	public String getDictObject() {
		List<DictObject> dictObjectList = commonService.getAll();
		attributes.put("dictObjectList", dictObjectList);
		return SUCCESS;
	}
	/**
	 * 编辑dictObject对象，用以进入添加或保存dictObject对象页面
	 * 
	 * @return
	 * @author 乔继承
	 * @date 2014年3月5日 上午12:39:27
	 */
	public String editDictObject() {
		return SUCCESS;
	}

	/**
	 * 根据对象的名称获取表名称获取当前对象的属性信息
	 * 
	 * @return
	 * @author 乔继承
	 * @date 2014年3月5日 下午11:39:53
	 */
	public String getDictObjectField() {
		Map<String, Object> params=actionContext.getRequestParams();//请求参数
		Object idObect = params.get("idObject");
		if (ObjectUtil.isEmpty(idObect)) {
			return ERROR;
		}
		List<DictObject2field> dictObject2fields=commonService.getAllDictObjectFieldInfoByidObject((String)idObect);
		attributes.put("dictObject2fields", dictObject2fields);
		attributes.put("idObject", idObect);
		return SUCCESS;

	}
	/**
	 * 根据字典对象的id编辑字典对象的属性名称
	 * @return
	 * @author 乔继承
	 * @date 2014年3月9日 下午4:01:35
	 */
	public String editDictObjectField(){
		Map<String, Object> params=actionContext.getRequestParams();//请求参数
		Object id=params.get("id");
		Object idObject=params.get("idObject");
		if (ObjectUtil.isEmpty(id)) {
			attributes.put("idObject", idObject);
			return SUCCESS;
		}
		
		DictObject2field dictObject2field=commonService.getDictObjectFieldById((String)id);
		attributes.put("dictObject2field", dictObject2field);
		return SUCCESS;
	}
	/**
	 * 根据字典对象的id编辑字典对象的属性名称
	 * @return
	 * @author 乔继承
	 * @date 2014年3月9日 下午4:01:35
	 */
	public String updateObjectField(){
		Map<String, Object> params=actionContext.getRequestParams();//请求参数
		Object idObject=params.get("idObject");
		Object id=params.get("id");
		String strId=(String)id;
		String strIdObject=(String)idObject;
		if (ObjectUtil.isEmpty(id)&&ObjectUtil.isEmpty(idObject)) {
			return ERROR;
		}
		DictObject2field dictObject2field=setDictObject2Field(params);
		dictObject2field.setId(strId);
		dictObject2field.setIdObject(strIdObject);
		List<DictObject2field> dictObject2fields=commonService.updateObjectField(dictObject2field);
		attributes.put("dictObject2fields", dictObject2fields);
		return SUCCESS;
	}
	/**
	 * 根据对象的信息表保存当前对象
	 * @return
	 * @author 乔继承
	 * @date 2014年3月9日 下午4:01:35
	 */
	public String updateObject(){
		Map<String, Object> params=actionContext.getRequestParams();//请求参数
		Object id=params.get("id");
		String strId=(String)id;
		DictObject dictObject=setDictObject(params);
		if (ObjectUtil.isEmpty(id)) {
			commonService.createTable(dictObject);
			return SUCCESS;
		}
		return SUCCESS;
	}

	/** 
	 * 根据参数构建dictObject2Field的值
	 * @param params
	 * @param idObject
	 * @param id
	 * @return
	 * @author 乔继承
	 * @date 2014年3月9日 下午7:55:37
	*/ 
	private DictObject2field setDictObject2Field(Map<String, Object> params) {
		DictObject2field dictObject2field=new DictObject2field();
		dictObject2field=(DictObject2field)setObjectValue(params, dictObject2field, "dictObject2field.");
		return dictObject2field;
	}
	/**
	 * 
	 * @param params
	 * @return
	 * @author 乔继承
	 * @date 2014年3月22日 上午12:06:02
	 */
	private DictObject setDictObject(Map<String, Object> params) {
		DictObject dictObject=new DictObject();
		String compareString="dictObject.";
		dictObject=(DictObject)setObjectValue(params, dictObject,compareString);
		return dictObject;
	}
	/**
	 * 
	 * @param params
	 * @param obj
	 * @param compareString
	 * @return
	 * @author 乔继承
	 * @date 2014年3月22日 上午12:06:07
	 */
	private Object setObjectValue(Map<String, Object> params, Object obj,
			String compareString) {
		BeanWrapper bw = new BeanWrapperImpl(obj);
		Set<Entry<String, Object>> set= params.entrySet();
		Iterator<Entry<String,Object>> it=set.iterator();
		while (it.hasNext()) {
			Entry<String,Object> entry=it.next();
			String key=entry.getKey();
			Object value=(String)entry.getValue();
			int length=compareString.length();
			if(ObjectUtil.isNotEmpty(value)&&ObjectUtil.isNotEmpty(key)){
				if(key.startsWith(compareString)){
					bw.setPropertyValue(key.substring(length), (String)value);
				}else{
					bw.setPropertyValue(key, (String)value);
				}
				
			}
		}
		return obj;
	}

	public ICommonSerivce getCommonService() {
		return commonService;
	}

	public void setCommonService(ICommonSerivce commonService) {
		this.commonService = commonService;
	}

}
